package main

import "fmt"

//Go 没有类的概念。但可以先定义结构体类型，再向里面添加自定义的方法。

type Vertex struct {
	x, y float64
	//无法在结构体内定义方法
}

//作为对照，先看一个简单的函数定义
func x2(num int) int {
	return num * 2
}

//如上面的普通的函数，在函数名之前。就是func关键字了。
//而对于方法来说，它在函数名和func关键字之间，还有一个”方法接收者“。
//在本例中 sum方法拥有一个类型为Vertex的接收者。这样就实现了向Vertex里添加方法
func (v Vertex) sum(n float64) float64 {
	return v.x + v.y + n//把这个v改名为this 就更像php中的类了
}

//区别上面,这里的sum，就不是方法了，而只是一个普通的函数。Vertex只是传为参数传递
func sum(v Vertex) float64 {
	return v.x + v.y
}

func main() {
	v := Vertex{3, 4}
	fmt.Println(v.sum(5)) //调用方法
	fmt.Println(sum(v))   //调用普通函数
}
